package kotlinx
//package com.example.myapplication.kotlin

fun main() {
    // 实例化
//    var dog = Dog()
//    dog.name = "旺财"
//    dog.friend = "小花"
//    dog.eat("骨头")
//    dog.bark()
//    println(dog.name + dog.friend)
//
//    // 实例化cat
//    var cat = Cat("三花猫", "罗非鱼", 99)
//    cat.eat()


    // 如果有次构造函数，可以通过多种不同的形式进行实例化
    val p = Person(18)
    val p2 = Person("小王", 18)
    val p3 = Person("小王", 18, "中国")
}

class Dog {
    var name: String = ""
    var friend: String = ""
    fun eat(food: String) {
        println(food + "好好吃")
    }

    fun bark() {
        println("旺旺~~")
    }
}

// constructor 后面写了属性，类的内部可以省略不写
class Cat constructor(var name: String, var food: String, var age: Int) {
    // 实例化时自动执行，可以写一些逻辑，可以省略不写
    init {
        println("init执行啦~~~")
        println(name + "+++" + food)
        // 可以对参数进行校验
        // require(布尔值){ false时的错误信息 }
        require(name.isNotEmpty()) { "出错啦" }
        require(age < 20) { "猫猫一般活不了这么久，你买的这只可能有点问题" }
    }

    fun eat() {
//        this.name
        // this可以省略
        println(name + "吃" + food)
    }
}
//多个次构造函数
class Person constructor(var age: Int){
    var name: String =""
    var country: String=""
 constructor(name: String,age: Int):this(age){
     this.name=name
 }
    constructor(name: String,age: Int,country: String):this(name,age){
        this.country=country
    }
}